range(start, stop)
range(start, stop, step)
returns a superposition of kets starting at start, and finishing at stop
with step size step, if it is provided, otherwise step with size 1
if start and stop have categories, then so does the result
if the categories differ, then return the empty ket |>
now partially implemented as: start .. stop
in this form, you can't specify the step size
Now we can handle 2D ranges too:
Eg: |-1: -1> .. |1: 1>